package cn.tedu.net.collection.oopstatic;
//本类用于测试多态
public class Test5 {
    public static void main(String[] args) {
        Animal a =new Animal();
        a.eat();
//        a.jump;父类无法使用子类的特有方法
        Cat c=new Cat();
        c.eat();
        c.jump();
        //创建多态对象进行测试
        /*
        父类引用指向子类对象
        编译看左边运行看右边
         */
        Animal h = new Cat();
        Animal j = new Dog();
        h.eat();//eat()使用的是父类的声明但是执行的子类的实现方式
        h.see();//可以直接继承
        j.eat();//统一使用一个方法,各自有各自的方法体
//        h.jump();                           父类有的方法才能用没有的用不了,子类可以对方法进行覆盖重写使用的就是子类的
        /*多态的出现是为了统一调用标准,向父类看齐,父类提供的功能才能用,子类特有的功能用不了*/
    }
}
//1.创建父类
class Animal{
    //创建普通方法eat()
    public void eat(){
        System.out.println("小动物吃啥都行~~~~");
    }
    public void see(){
        System.out.println("看世界");
    }
}
//创建子类Cat
class Cat extends Animal{
    //覆盖重写:返回值类型 方法名 参数列表保持一致   权限修饰符>=父类权限修饰符
    @Override
    public void eat(){
        System.out.println("小猫Cat爱吃小鱼干!!");
    }
    public void jump(){
        System.out.println("小猫Cat跳的高~");
    }
}
class Dog extends Animal{
    @Override
    public void eat(){
        System.out.println("小狗Dog爱吃肉骨头");
    }
}